package dk.mitaffald.main;

import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.OnNavigationListener;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.GoogleMap.OnInfoWindowClickListener;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import dk.mitaffald.maps.AbstractMapActivity;
import dk.mitaffald.maps.PopupMapBasedAdapter;
import dk.tankegang.mitaffald.R;

import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Build;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;


public class MapBased extends AbstractMapActivity implements OnNavigationListener,OnInfoWindowClickListener
	{
	    private static final String TAG_Location = "location_id";
	    private static final String TAG_Company = "company_id";
	    private static final String TAG_PLACE = "place";
	    private static final String TAG_POSTAL = "postal";
	    private static final String TAG_CITY = "city";
	    private static final String TAG_MONDAY = "monday";
	    private static final String TAG_TUESDAY = "tuesday";
	    private static final String TAG_WEDNESDAY = "wednesday";
	    private static final String TAG_THURSDAY = "thursday";
	    private static final String TAG_FRIDAY = "friday";
	    private static final String TAG_SATURDAY = "saturday";
	    private static final String TAG_SUNDAY = "sunday";
	    private static final String TAG_TYPE = "type";
	    private static final String TAG_NOCAR = "nocar";
	 
	    private static final String TAG_NAME = "name";
	    private static final String TAG_LAT = "lat";
	    private static final String TAG_LNG = "lng";
	    private static final String TAG_ADDRESS = "address";
	    private static final String TAG = "Debug of Project"; // 

    private String a;
	private String b;
	
	private double my_lat;
	private double my_lng;

	private static final String STATE_NAV="nav";
	private static final int[] MAP_TYPE_NAMES= { R.string.normal, R.string.hybrid, R.string.satellite, R.string.terrain };
	private static final int[] MAP_TYPES= { GoogleMap.MAP_TYPE_NORMAL, GoogleMap.MAP_TYPE_HYBRID, GoogleMap.MAP_TYPE_SATELLITE,
									GoogleMap.MAP_TYPE_TERRAIN };
	private GoogleMap map=null;
	
	 HashMap<String, HashMap> extraMarkerInfo = new HashMap<String, HashMap>();

	
	
    @Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		SQLiteDatabase db = openOrCreateDatabase("mydb.db", Context.MODE_PRIVATE, null);
        db.execSQL("CREATE TABLE IF NOT EXISTS gps_kordinater (ID INTEGER PRIMARY KEY AUTOINCREMENT, Latitude REAL, Longitude REAL);");
        
        String query = "SELECT Latitude,Longitude FROM gps_kordinater WHERE Id = (SELECT MAX(Id) FROM gps_kordinater)";
        Cursor cursor = db.rawQuery(query, null);
        if(cursor != null)
        {
        cursor.moveToFirst();
         a = cursor.getString(0);
         
         b = cursor.getString(1);
        }
        
       
       String url = "http://webservice.mitaffald.dk/webservice/getLocationList.php?lat="+ a +"&lng="+ b +"";
 
       my_lat = Double.valueOf(a);  
       my_lng = Double.valueOf(b);
       
       
       db.close();
	    
		// now enabled if disabled = ingen support for jb aka 4.0
		 if (android.os.Build.VERSION.SDK_INT > 9) {
		      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
		      StrictMode.setThreadPolicy(policy);
		 }
	
		ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();
		JSONParser jParser = new JSONParser();
     	JSONArray json = jParser.getJSONFromUrl(url);
    	try {
			   for(int i = 0; i < json.length(); i++){
			        JSONObject c = json.getJSONObject(i);
	
			        String lat = c.getString(TAG_LAT);
			        String lng = c.getString(TAG_LNG);
			        String name = c.getString(TAG_NAME);
			        String adresse = c.getString(TAG_ADDRESS);
				      
					String location_id = c.getString(TAG_Location);
					String company_id = c.getString(TAG_Company);
					String place = c.getString(TAG_PLACE) ;	
					String postal = c.getString(TAG_POSTAL);
					String city = c.getString(TAG_CITY);
					String monday = c.getString(TAG_MONDAY);
					if(c.getString(TAG_MONDAY).isEmpty())
						{
							monday="Lukket";
						}
					else
						{
							monday=c.getString(TAG_MONDAY);
						}
					
					String tuesday = c.getString(TAG_TUESDAY);
					if(c.getString(TAG_TUESDAY).isEmpty())
						{
							tuesday="Lukket";
						}
					else
						{
							tuesday=c.getString(TAG_TUESDAY);
						}

					String wednesday = c.getString(TAG_WEDNESDAY);	
					if(c.getString(TAG_WEDNESDAY).isEmpty())
						{
							wednesday="Lukket";
						}
					else
						{
							wednesday=c.getString(TAG_WEDNESDAY);
						}
					
					String thursday = c.getString(TAG_THURSDAY);
					if(c.getString(TAG_THURSDAY).isEmpty())
						{
							thursday="Lukket";
						}
					else
						{
							thursday=c.getString(TAG_THURSDAY);
						}
						
					String friday = c.getString(TAG_FRIDAY);
					if(c.getString(TAG_FRIDAY).isEmpty())
						{
							friday="Lukket";
						}
					else
						{
							friday=c.getString(TAG_FRIDAY);
						}
						
					String saturday = c.getString(TAG_SATURDAY);
					if(c.getString(TAG_SATURDAY).isEmpty())
						{
							saturday="Lukket";
						}
					else
						{
							saturday=c.getString(TAG_SATURDAY);
						}	
					
					String sunday=c.getString(TAG_SUNDAY);
					if(c.getString(TAG_SUNDAY).isEmpty())
						{
							sunday="Lukket";
						}
					else
						{
							sunday=c.getString(TAG_SUNDAY);
						}
		
					

					String nocar = c.getString(TAG_NOCAR);
					String type = c.getString(TAG_TYPE);
					
			        
	    		// creating new HashMap
			    HashMap<String, String> map2 = new HashMap<String, String>();
			        
				// adding each child node to HashMap key => value
				
			    map2.put(TAG_LAT, lat);
				map2.put(TAG_LNG, lng);
				
				map2.put(TAG_NAME, name);
				map2.put(TAG_ADDRESS, adresse);
				map2.put(TAG_Location, location_id);
				map2.put(TAG_Company, company_id);
				map2.put(TAG_PLACE, place);
				map2.put(TAG_POSTAL, postal);
				map2.put(TAG_CITY, city);
				map2.put(TAG_MONDAY, monday);
				map2.put(TAG_TUESDAY, tuesday);
				map2.put(TAG_WEDNESDAY, wednesday);
				map2.put(TAG_THURSDAY, thursday);
				map2.put(TAG_FRIDAY, friday);
				map2.put(TAG_SATURDAY, saturday);
				map2.put(TAG_SUNDAY, sunday);
				map2.put(TAG_TYPE, type);
				map2.put(TAG_NOCAR, nocar);
				
				// adding HashList to ArrayList
				contactList.add(map2);
				
				 Log.d(TAG, "Hashmap 1: " + map2); 
				   
				 Log.d(TAG, "Hashmap 2: " + map2.values()); 
				 Log.d(TAG, "array 4: " + contactList); 
			
			   }

			   
			   Log.d(TAG, "array 5: " + contactList); 
			
		} catch (JSONException e) {
		    e.printStackTrace();
			Log.e("JSON Parser", "Error parsing data " + e.toString());
			
		}
	
    	if (readyToGo()) {
    		setContentView(R.layout.map_based);

    		SupportMapFragment mapFrag=
    				(SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map2);
    		initListNav();
    		
    		map=mapFrag.getMap();
	
    		CameraUpdate center= CameraUpdateFactory.newLatLng(new LatLng(my_lat , my_lng));

    		CameraUpdate zoom=CameraUpdateFactory.zoomTo(10);
    		map.moveCamera(center);
    		map.animateCamera(zoom);

    		
    		for (HashMap<String, String> hashMap : contactList) {
    		     // Create your marker like normal, nothing changes
    		     Marker marker = map.addMarker(new MarkerOptions()
    		         .position(new LatLng(Double.valueOf(hashMap.get(TAG_LAT)) , Double.valueOf(hashMap.get(TAG_LNG))))
    		         .title(hashMap.get(TAG_ADDRESS))
    		         .snippet(hashMap.get(TAG_NAME)));
    		     // When you created the marker you store the extra data from your JSON in another variable (HashMap for example)
    		     HashMap<String, String> data = new HashMap<String, String>();

    		     data.put(TAG_Location,hashMap.get(TAG_Location));
    		     
    		     data.put(TAG_Company,hashMap.get(TAG_Company));
    		     
    		     data.put(TAG_ADDRESS,hashMap.get(TAG_ADDRESS));
    		     
    		     data.put(TAG_NAME,hashMap.get(TAG_NAME));
    		     
    		     data.put(TAG_PLACE,hashMap.get(TAG_PLACE));
    		     
    		     data.put(TAG_POSTAL,hashMap.get(TAG_POSTAL));
    		     
    		     data.put(TAG_CITY,hashMap.get(TAG_CITY));
    		     
    		     data.put(TAG_MONDAY,hashMap.get(TAG_MONDAY));
    		     data.put(TAG_TUESDAY,hashMap.get(TAG_TUESDAY));
    		     data.put(TAG_WEDNESDAY,hashMap.get(TAG_WEDNESDAY));
    		     data.put(TAG_THURSDAY,hashMap.get(TAG_THURSDAY));
    		     data.put(TAG_FRIDAY,hashMap.get(TAG_FRIDAY));
    		     data.put(TAG_SATURDAY,hashMap.get(TAG_SATURDAY));
    		     data.put(TAG_SUNDAY,hashMap.get(TAG_SUNDAY));
    		     
    		     data.put(TAG_TYPE,hashMap.get(TAG_TYPE));
    		     data.put(TAG_NOCAR,hashMap.get(TAG_NOCAR));
    		
    		     data.put(TAG_LAT,hashMap.get(TAG_LAT));
    		     data.put(TAG_LNG,hashMap.get(TAG_LNG));

    		     // Save this marker data in your previously made HashMap mapped to the marker ID. So you can get it back based on the marker ID
    		     extraMarkerInfo.put(marker.getId(),data);

    		}
    	 	
    		map.setInfoWindowAdapter(new PopupMapBasedAdapter(getLayoutInflater()));
			map.setOnInfoWindowClickListener(this);

    	}
    		     
    		
    	
	     Button btn_web = (Button) findViewById(R.id.footer_list_btn);
	        btn_web.setOnClickListener(new View.OnClickListener() {
	        	@Override
	     			public void onClick(View view) {
	        		//myVib.vibrate(50);
	        	    finish();
	     			}
	     		});
    }

    @Override
    public boolean onNavigationItemSelected(int itemPosition, long itemId) {
    	map.setMapType(MAP_TYPES[itemPosition]);
		return(true);
    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
    	super.onSaveInstanceState(savedInstanceState);
    	savedInstanceState.putInt(STATE_NAV,getSupportActionBar().getSelectedNavigationIndex());
    }

    @Override
    public void onInfoWindowClick(Marker marker) {

        String title = marker.getTitle();
        String snippet = marker.getSnippet(); 

        // Get extra data with marker ID
        HashMap<String, String> marker_data = extraMarkerInfo.get(marker.getId());

        // Getting the data from Map
      //  String location = marker_data.get(TAG_Location);
      //  String company = marker_data.get(TAG_Company);
        String adresse = marker_data.get(TAG_ADDRESS);
        String navn = marker_data.get(TAG_NAME);
        
        // String place = marker_data.get(TAG_PLACE);
        String zip = marker_data.get(TAG_POSTAL);
        String by = marker_data.get(TAG_CITY);
        String mandag = marker_data.get(TAG_MONDAY);
        String tirsdag = marker_data.get(TAG_TUESDAY);
        String onsdag = marker_data.get(TAG_WEDNESDAY);
        String torsdag = marker_data.get(TAG_THURSDAY);
        String fredag = marker_data.get(TAG_FRIDAY);
        String lordag = marker_data.get(TAG_SATURDAY);
        String sondag = marker_data.get(TAG_SUNDAY);
        String name 	  = marker_data.get(TAG_LAT);
        String cost 	  = marker_data.get(TAG_LNG);
        
    	
        // Starting new intent
        Intent in = new Intent(getApplicationContext(), dk.mitaffald.maps.MainActivity.class);
          
        
        in.putExtra(TAG_NAME, navn);
        in.putExtra(TAG_ADDRESS, adresse);
        in.putExtra(TAG_CITY, by);
        in.putExtra(TAG_POSTAL, zip);

        in.putExtra(TAG_LAT, name);
        in.putExtra(TAG_LNG, cost);

        in.putExtra(TAG_MONDAY, mandag);
        in.putExtra(TAG_TUESDAY, tirsdag);
        in.putExtra(TAG_WEDNESDAY, onsdag);
        in.putExtra(TAG_THURSDAY, torsdag);
        in.putExtra(TAG_FRIDAY, fredag);
        in.putExtra(TAG_SATURDAY, lordag);
        in.putExtra(TAG_SUNDAY, sondag);
        
	 //   Log.d(TAG, "Leyth Days = Mandag : " + mandag +"     Onsdag : "+sondag);
		startActivity(in);

    
    }

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
getSupportActionBar().setSelectedNavigationItem(savedInstanceState.getInt(STATE_NAV));
}

private void initListNav() {
	ArrayList<String> items=new ArrayList<String>();
	ArrayAdapter<String> nav=null;
	ActionBar bar=getSupportActionBar();

		for (int type : MAP_TYPE_NAMES) {
			items.add(getString(type));
		}
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
			nav=
					new ArrayAdapter<String>(
							bar.getThemedContext(),
							android.R.layout.simple_spinner_item,
							items);
					}
		else {
			nav=
				new ArrayAdapter<String>( 
						this,
                       android.R.layout.simple_spinner_item,
                       items);
					}
		
		nav.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
		bar.setListNavigationCallbacks(nav, this);	
	}


}